home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #43 (Apr 89) / XCMDSource Code / ADSPHangUp.p < prev    next >
Text File  |  1989-02-07  |  2KB  |  110 lines

  1. (****************************)
  2. (*    file:     ADSPHangUp.p        *)
  3. (*                                                     *)
  4. (* Disconnect an established*)
  5. (* connection and deallocate*)
  6. (* the data  associated with*)
  7. (* the connection.                    *)
  8. (*                                                    *)
  9. (* In:    params[1] Name of     *)
  10. (* the entity to hangup on    *)
  11. (*                                                     *)
  12. (* Out:    error message,            *)
  13. (*    empty if none.                    *)
  14. (*                                                    *)
  15. (* ------------------------    *)
  16. (* By:        Donald Koscheka        *)
  17. (* Date:    2-Mar-89                    *)
  18. (*        All Rights Reserved        *)
  19. (*                                                    *)
  20. (* ------------------------    *)
  21. (****************************)
  22.  
  23. (*****************************
  24.                             Build Sequence
  25.  
  26. pascal -o ADSPHangUp.p.o ADSPHangUp.p
  27. link -m ENTRYPOINT  -rt XCMD=1304 -sn Main=ADSPHangUp∂
  28.     ADSPHangUp.p.o∂
  29.     "{libraries}"Interface.o ∂
  30.     -o YourStackNameHere
  31.          
  32. ******************************)
  33.  
  34.  
  35. {$R-}
  36. {$S ADSPHangUp}
  37. UNIT DummyUnit;
  38.  
  39. (****************************)
  40.                 INTERFACE 
  41. (****************************)
  42.  
  43.  
  44. Uses    MemTypes, QuickDraw, OSIntf,
  45.             ToolIntf, PackIntf, HyperXCmd, 
  46.             AppleTalk, ADSP, adspxcmd;
  47.  
  48.  
  49. Procedure EntryPoint( paramPtr : XCmdPtr );
  50.  
  51.  
  52. (****************************)
  53.             IMPLEMENTATION
  54. (****************************)
  55. TYPE Str31 = String[31];
  56.  
  57.  
  58. PROCEDURE ADSPHangUp( paramPtr: XCmdPtr ); FORWARD;
  59.  
  60. Procedure EntryPoint( paramPtr : XCmdPtr );
  61.     Begin
  62.         ADSPHangUp( paramPtr );
  63.     End;
  64.     
  65.     
  66. Procedure ADSPHangUp( paramPtr : XCmdPtr );
  67. VAR
  68.     adsp        : ADSPPtr;
  69.     error        : OSErr;
  70.     pb            : DSPParamBlock;
  71.     eAddr        : AddrBlock;
  72.     cb            : CBPtr;
  73.  
  74. {$I XCmdGlue.inc }
  75. {$I XCMDADSP.inc }    
  76. (****************************)
  77. BEGIN
  78.     error := noErr;
  79.     IF ( paramPtr^.paramCount > 0 )
  80.     AND ( paramPtr^.params[1] <> NIL ) THEN        
  81.     BEGIN
  82.         adsp := ADSPPtr(RetrieveData( 'GLOBALDSPDATA' ));
  83.         IF adsp <> NIL THEN
  84.         BEGIN
  85.             adsp^.checkPoint := RECEIVING;
  86.             {*** (1) Get the entity's address    ***}
  87.             HLock( Handle(paramPtr^.params[1]) );
  88.             eAddr := NBPGetAddress( paramPtr^.params[1]^ );
  89.             cb := adsp^.ends;
  90.             
  91.             {*** match the entity to the list ***}
  92.              IF LongInt(eAddr) <> 0 THEN                    
  93.             WHILE cb <> NIL DO
  94.                 IF LongInt(cb^.adr ) = LongInt( eAddr ) THEN
  95.                     BEGIN
  96.                         error := DSPHangUp( cb );
  97.                         cb := NIL;
  98.                     END
  99.                 ELSE
  100.                     cb := cb^.next;
  101.                 
  102.             HUnlock( Handle(paramPtr^.params[1]) );
  103.             adsp^.checkPoint := CLOSE_OK;
  104.         END
  105.     END;
  106.     paramPtr^.returnValue := PasToZero( NumToStr( LongInt(error) ) );
  107. END;
  108.  
  109. end.
  110.